home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 44
/
Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso
/
-serious-
/
misc
/
cmq060
/
source
/
cmq060.includebeepcmq.s
< prev
next >
Wrap
Text File
|
1999-07-26
|
4KB
|
160 lines
*************************************
* CopyMemQuicker060 BeepCMQ *
* Include File V1.0 *
* written by Dirk Busse *
* 19. Sep. 1998 *
*************************************
PatchStart
; move.l a6,-(sp)
; movea.l intbase,a6
; move.l a0,-(sp)
; move.l a1,-(sp)
; move.l d0,-(sp)
; move.l #0,a0
; jsr _LVODisplayBeep(a6)
; move.l (sp)+,d0
; movea.l (sp)+,a1
; movea.l (sp)+,a0
; movea.l (sp)+,a6
tst.l d0
beq.b squit
move.w a1,d1 ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
btst #0,d1
beq.b .skip1
move.b (a0)+,(a1)+ ;Zieladresse auf EVEN setzen
subq.l #1,d0
beq.b squit
move.w a1,d1
.skip1 btst #1,d1
beq.b .skip2
cmpi.l #1,d0
bne.b .two
move.b (a0)+,(a1)+
rts
.two move.w (a0)+,(a1)+ ;Zieladresse auf LONG setzen
subq.l #2,d0
beq.b squit
.skip2
cmpi.l #%0000100000010000,d0 ;prüfen, ob d0 >2064
bpl.b bigmove
smlmove move.l d0,d1
lsr.w #2,d1 ;d0 ist hier nur noch maximal 12Bit lang
beq.b .nolong
.loop move.l (a0)+,(a1)+
subq.w #1,d1
bne.b .loop
.nolong btst #1,d0
beq.b .skip
move.w (a0)+,(a1)+ ;letztes Word uebertragen
.skip btst #0,d0
beq.b squit
move.b (a0)+,(a1)+ ;letztes Byte uebertragen
squit rts
bigmove btst #0,d0
beq.b .skip1
subq.l #1,d0
move.b (a0,d0.l),(a1,d0.l) ;letztes Byte übertragen
.skip1 btst #1,d0
beq.b .skip2
subq.l #2,d0
move.w (a0,d0.l),(a1,d0.l) ;letztes Word übertragen
.skip2 lsr.l #2,d0 ;jetzt ist d0 durch 4 teilbar
jmp bigmo16
cnop 0,4
**************************************************************************
Quickest
move.l a6,-(sp)
movea.l intbase,a6
move.l a0,-(sp)
move.l a1,-(sp)
move.l d0,-(sp)
move.l #0,a0
jsr _LVODisplayBeep(a6)
move.l (sp)+,d0
movea.l (sp)+,a1
movea.l (sp)+,a0
movea.l (sp)+,a6
lsr.l #2,d0
cmpi.l #%0000001000000100,d0 ;prüfen, ob d0 > 2064/4
bpl.b bigmo16
smlmovQ tst.w d0 ;d0 ist hier nur noch maximal 10 Bit lang
beq.b squitQ
sloopQ move.l (a0)+,(a1)+
subq.w #1,d0
bne.b sloopQ
squitQ rts
bigmo16 move.w a1,d1
btst #2,d1
beq.b .skip1
subq.l #1,d0 ;Zieladresse auf 8-Byte-Block legen
move.l (a0)+,(a1)+
move.w a1,d1
.skip1 btst #3,d1
beq.b dest16
subq.l #2,d0 ;Zieladresse auf 16-Byte-Block legen
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
dest16 move.w a0,d1
andi.b #15,d1
bne.b bigmovQ ;wenn Quelladresse nicht im 16-Byte-Block liegt
move.l d0,d1
lsr.l #5,d1
.loop move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b sloopQ
rts
bigmovQ move.l d0,d1
lsr.l #4,d1
.loop move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b sloopQ
rts
cnop 0,4
intbase
dc.l $0
PatchEnd